/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.itschapala.dsw2.biblioteca8a.BL;

import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.itschapala.dsw2.biblioteca8a.Dao.DetallePrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.Dao.PrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.Enumeracion.EstadoDetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.Enumeracion.EstadoPrestamo;
import mx.itschapala.dsw2.biblioteca8a.Enumeracion.EstadoServicio;
import mx.itschapala.dsw2.biblioteca8a.modelo.Categoria;
import mx.itschapala.dsw2.biblioteca8a.modelo.DetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Libro;
import mx.itschapala.dsw2.biblioteca8a.modelo.Prestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Usuario;

/**
 *
 * @author Raven
 */
@Stateless
public class PrestamoBL implements PrestamoBLLocal {
   //
    
    @EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
   @EJB
    private PrestamoDaoLocal prestamoDao;

    @Override
    public EstadoServicio lendBooks(Usuario user, List<Libro> books) {
        List<Prestamo> prestamos=prestamoDao.findIncompleteByUser(user);
        int available=3;
        for(Prestamo p: prestamos)
        {
         available=available-detallePrestamoDao.findLends(p).size();
        
    }
        if(available<=0 || user.getId()==null || books.isEmpty() || books.size()>available){
            return EstadoServicio.INCOMPLETE;
        }
        else{
            Prestamo p=new Prestamo();
            p.setIdusuario(user);
            p.setFecha(new Date());
            p.setHora(new Date());
            p.setEstado(EstadoPrestamo.OPEN.ordinal());
            prestamoDao.create(p);
            
            for(Libro l :books){
                DetallePrestamo dp= new DetallePrestamo();
                dp.setIdprestamo(p);
                dp.setIdlibro(l);
                dp.setEstado(EstadoDetallePrestamo.LEND.ordinal());
                detallePrestamoDao.create(dp);
            }
          return EstadoServicio.COMPLETE;
    
    
}
    }

    /**
     *
     * @return
     */
    @Override
    public List<Prestamo> getAll(){
return prestamoDao.findAll();

}
    
    @Override
    public Prestamo findById(int id)
    {
    return prestamoDao.find(id);
    }
}
